import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ServeStaticModule } from '@nestjs/serve-static';
import { AppController } from './app.controller';
import { AppService } from './app.service';

import { ErrorsInterceptor } from './error/errors.interceptor';
import { UserModule } from './user/user.module';
import { TodoModule } from './todo/todo.module';
import { AuthModule } from './auth/auth.module';
import { UploadModule } from './upload/upload.module';
import { join } from 'path';

/**
 * @Module() 定义一个模块，并管理这个模块的导入集合、控制器集合、提供者集合、导出集合
 */
@Module({
  // TypeOrmModule.forRoot() 默认加载项目根目录下的 ormconfig.json 配置文件用于配置数据库连接
  // TypeORM 配置文件详细文档 https://typeorm.io/#/using-ormconfig
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'public'),
    }),
    TypeOrmModule.forRoot(),
    AuthModule,
    UserModule,
    TodoModule,
    UploadModule,
  ], // 导入其他模块的集合
  controllers: [AppController], // 当前模块的控制器集合
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: ErrorsInterceptor,
    },
    AppService,
  ], // 当前模块的提供者集合
  exports: [], // 导出当前模块的提供者，用于被其他模块调用
})
export class AppModule {}
